跳到主要内容

Python 包管理

配置环境

sudo apt install pip
# 检查安装的版本
pip --version

# e.g. 下载名为 camelcase 的包
pip install camelcase
# 删除包
pip uninstall camelcase

# 列出所有的包
pip list

虚拟环境是什么?

在开发 Python 应用程序的时候,系统安装的 Python3 只有一个版本:3.10。所有第三方的包都会被 pip 安装到 Python3 的 site-packages 目录下。如果我们要同时开发多个应用程序,那这些应用程序都会共用一个 Python,就是安装在系统的 Python3。如果应用 A 需要 jinja 2.7,而应用 B 需要 jinja 2.6 怎么办?

这种情况下,每个应用可能需要各自拥有一套“独立”的 Python 运行环境。

虚拟环境通过创建一个独立的目录,其中包含一个 Python 解释器的拷贝以及用于管理依赖包的工具。这样,当你激活虚拟环境时,所有的 Python 包和工具将在该环境中运行,而不会与全局 Python 环境发生冲突。

提示

Python 的虚拟环境是一种机制,用于在同一台机器上隔离和管理不同项目的 Python 解释器、依赖包和环境变量。它允许你在每个虚拟环境中拥有独立的Python环境,这样你就可以在不同项目之间保持依赖关系的隔离,避免包冲突和版本问题。

虚拟环境可以提供以下好处:

  1. 依赖隔离:每个虚拟环境都有自己的独立 Python 解释器和安装的包,这使得不同项目可以使用不同版本的包,而不会相互干扰或产生冲突。
  2. 环境一致性:通过在每个项目中使用独立的虚拟环境,你可以确保每个项目在不同的机器上或共享给其他开发者时能够以相同的环境运行。这有助于确保项目在不同环境下具有一致的行为。
  3. 方便迁移和共享:虚拟环境可以轻松地迁移到其他机器或共享给其他开发者。通过将虚拟环境的配置文件(如 requirements.txt 或 environment.yml)与项目一起共享,其他人可以轻松地设置相同的环境。

Python 提供了多个工具来创建和管理虚拟环境,包括 venv、virtualenv 和 conda 等。这些工具都有类似的原理,但具体的用法和命令可能有所不同。你可以选择最适合你项目需求和工作流程的工具来创建和管理虚拟环境。

venv 是什么?

venv 是 Python 官方在 Python 3.3 版本内置的一个标准库模块,让我们可以快速生成一个虚拟环境。只要下载的 Python 解释器版本在 3.3 及以上就能直接使用,而无需安装其他依赖。

提示

需要注意的是,venv 工具没法创建不同版本的python环境,也就是如果你用 python3.5 没法创建 python3.6 的虚拟环境。如果想要使用不同 python 版本的虚拟环境,请安装 virtual env 包。

python3.10 -m venv <your-virtual-environment-name>

通常我们在创建虚拟环境时需,要简单指定一个名称用以存放虚拟环境的内容,所以上述代码中的名称通常就保持和 venv 模块名称一致:

python3.10 -m venv .venv

然后它会创建一个同名的虚拟环境目录

.
└── .venv
├── bin
│ ├── activate
│ ├── python -> python3
│ ├── python3 -> /usr/bin/python3
│ └── python3.10 -> python3
├── include
├── lib
│ └── python3.10
│ └── site-packages
├── lib64 -> lib
└── pyvenv.cfg

venv 怎么使用?

启用虚拟环境

source $PWD/.venv/bin/activate

它就会把相应的环境变量写入到当前终端里面,后续执行安装会把包会放在 $PWD/.venv/lib/pythonx.x/site-packages 目录下。

退出虚拟的 Python 环境,在命令行执行下面的命令即可:

deactivate

requirements.txt 文件是什么

很多 Python 项目中经常会包含一个 requirements.txt 文件,里面内容是项目的依赖包及其对应版本号的信息列表,即项目依赖关系清单,其作用是用来重新构建项目所需要的运行环境依赖,比如你从 GitHub 上 clone 了一个 Python 项目,通常你会先找到 requirements.txt 文件,然后运行命令 pip install -r requirements.txt 来安装该项目所依赖的包。

如何生成 requirements.txt 文件呢?

pip freeze > requirements.txt

这将使用 pip freeze 命令来获取当前项目中安装的所有依赖包及其版本,并将其输出到 requirements.txt 文件中。在当前目录下将会生成一个名为 requirements.txt 的文件,其中包含了项目的依赖包及其版本信息。

更换 pip 的源

腾讯源:

pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple
pip config set global.trusted-host mirrors.cloud.tencent.com

如果报错

WARNING: The repository located at mirrors.cloud.tencent.com is not a trusted or secure host and is being ignored. If this repository is available via HTTPS we recommend you use HTTPS instead, otherwise you may silence this warning and allow it anyway with '--trusted-host mirrors.cloud.tencent.com'.

只需要把 http 改成 https 就行了

清华源:

pip config set global.index-url http://pypi.tuna.tsinghua.edu.cn/simple
pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn

阿里源:

# 巨慢
pip config set global.index-url http://mirrors.aliyun.com/pypi/simple
pip config set global.trusted-host mirrors.aliyun.com

配置文件默认保存在

C:\ProgramData\pip\pip.ini

目录下面

Conda 怎么使用?

Conda 也是一个管理版本和 Python 环境的工具

1、创建环境

# 创建一个名为 py35 的环境,指定 Python 版本是3.5(不用管是 3.5.x,conda会为我们自动寻找 3.5.x 中的最新版本)
conda create --name py35 python=3.5

2、激活环境

# 安装好后,使用 activate 激活某个环境
activate py35 # for Windows
source activate py35 # for Linux & Mac
(py35) alsritter@:~$
# 激活后,会发现 terminal 输入的地方多了 py35 的字样,实际上,此时系统做的事情就是把默认 2.7 环境从 PATH 中去除,再把 3.4 对应的命令加入 PATH

(py35) alsritter@:~$ python --version
Python 3.5.5 :: Anaconda, Inc.
# 可以得到 `Python 3.5.5 :: Anaconda, Inc.`,即系统已经切换到了3.5的环境

3、返回主环境

# 如果想返回默认的 python 2.7 环境,运行
deactivate py35 # for Windows
source deactivate py35 # for Linux & Mac

4、删除环境

# 删除一个已有的环境
conda remove --name py35 --all


# 如果只是想删除环境里的某个依赖,可以使用如下命令
conda remove --name <env_name> <package_name>
# e.g.
conda remove --name PaddleOCR requests

5、查看系统中的所有环境

用户安装的不同 Python 环境会放在 ~/anaconda/envs 目录下。

# 查看当前电脑上所有的conda环境
conda env list

如何检查包的版本

# 查看当前环境下已经安装的包
pip show <package_name>